/******************************************************************************
 *
 * @file       cards.h
 * @brief      卡牌类：多张卡牌类
 *
 * @author     ax
 * @date       2024/05/21
 * @history
 *****************************************************************************/

#ifndef CARDS_H
#define CARDS_H
#include "card.h"

#include <QSet>

class Cards
{
public:
    enum SortType{Asc, Desc, NoSort};
    Cards();
    explicit Cards(const Card& card);

    // 添加卡牌
    void add(const Card& card);
    void add(const Cards& cards);
    void add(const QVector<Cards>& cards);

    Cards& operator <<(const Card& card);
    Cards& operator <<(const Cards& cards);

    // 移除卡牌
    void remove(const Card& card);
    void remove(const Cards& cards);
    void remove(const QVector<Cards>& cards);

    int cardCount(); // 卡牌的数量
    bool isEmpty(); // 卡牌是否为空
    bool isEmpty() const;
    void clear(); // 清空卡牌

    Card::CardPoint maxPoint(); // 最大点数的卡牌
    Card::CardPoint minPoint(); // 最小点数的卡牌
    int pointCount(Card::CardPoint point); // 指定卡牌的数量
    bool contains(const Card& card); // 指定的单张卡牌是否存在
    bool contains(const Cards& cards); // 指定的多张卡牌是否存在

    Card takeRandomCard(); // 随机出一张牌

    CardList toCardList(SortType type = Desc); // 把无序卡牌 QSet ---> 有序卡牌 QVector

    void printAllCardInfo();

private:
    // 每一个玩家都有很多的Card怎么表示？
    // 使用Qt的QSet（用的是hash表实现的，stl里面用的是红黑树实现的，所以得自己实现排序）
    QSet<Card> m_cards;
};

#endif // CARDS_H
